package com.yusvn.scm.admin.controller;

import com.alibaba.fastjson.JSONObject;
import com.jfinal.aop.Clear;
import com.jfinal.aop.Inject;
import com.jfinal.core.ActionKey;
import com.jfinal.ext.cors.EnableCORS;
import com.jfinal.kit.StrKit;
import com.wf.captcha.SpecCaptcha;
import com.yusvn.scm.admin.auth.AdminAuthInterceptor;
import com.yusvn.scm.admin.service.LoginService;
import com.yusvn.scm.common.BaseController;
import com.yusvn.scm.common.interceptor.LoginInterceptor;
import com.yusvn.scm.common.kit.RetKit;

/**
 * 登录认证
 * @author liugz
 *
 */
@EnableCORS
public class LoginController extends BaseController {

	@Inject
	LoginService srv;
	
	public void index() {
		renderJson();
	}

	/**
	 * 用户登录
	 */
	@Clear({LoginInterceptor.class, AdminAuthInterceptor.class})
	public void login() {
//		getFile();  //客户端请求为multipart request（form表单使用了enctype="multipart/form-data"），那么必须先调用getFile系列方法才能使getPara系列方法正常工作，因为multipart request需要通过getFile系列方法解析请求体中的数据，包括参数。
		
		String username = null; //用户名
		String password = null; //密码
//		String code = null; //验证码
//		String remember = null; //记住密码
		
		String jsonStr = getRawData();
		
		if(StrKit.isBlank(jsonStr)) {
			username = getPara("username");
			password = getPara("password");
		} else {
			JSONObject jsonObj = JSONObject.parseObject(jsonStr);
			username = jsonObj.getString("username"); //用户名
			password = jsonObj.getString("password"); //密码
		}
		
		RetKit ret = srv.doLogin(username, password, getRequest());
		renderJson(ret);
	}
	
	/**
	 * 注销登录
	 */
	@Clear({LoginInterceptor.class, AdminAuthInterceptor.class})
	public void quitout() {
		String username = null; //用户名
		String password = null; //密码
//		String code = null; //验证码
//		String remember = null; //记住密码
		
		String jsonStr = getRawData();
		
		if(StrKit.isBlank(jsonStr)) {
			username = getPara("username");
			password = getPara("password");
		} else {
			JSONObject jsonObj = JSONObject.parseObject(jsonStr);
			username = jsonObj.getString("username"); //用户名
			password = jsonObj.getString("password"); //密码
		}
		
		RetKit ret = srv.quitout(username, password, getRequest());
		renderJson(ret);
	}

	/**
	 * 退出登录
	 */
	@Clear({LoginInterceptor.class, AdminAuthInterceptor.class})
	public void logout() {
		srv.logout(getSessionId(), getRequest());
		renderJson(RetKit.ok());
	}
	
	/**
	 * 图形验证码 basee64格式
	 */
	@Clear({LoginInterceptor.class, AdminAuthInterceptor.class})
	@ActionKey("/api/file/captcha")
	public void captcha() {
		SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 4);
		String code = specCaptcha.text().toLowerCase(); //验证码， 
		//将验证码存入数据库验证码表中，登录时校验?或直接前端校验？TODO
		
        renderJson( RetKit.ok().setData(specCaptcha.toBase64()).put("text", code) );
	}
	
	/**
	 * 图形验证码 img图片格式
	 */
	@Clear({LoginInterceptor.class, AdminAuthInterceptor.class})
	@ActionKey("/api/file/captcha2")
	public void captcha2() {
		renderCaptcha();
	}
	
	/**
	 * 系统配置信息
	 */
	@ActionKey("/api/sys/sysconfig")
	public void getSysConfig() {
		renderJson(RetKit.ok().setData( srv.getSysConfig() ));
	}
	
}
